BigQueryのオブジェクト テーブルで署名付きURLを発行する(プレビュー)
データアナリティクス事業本部、池田です。
前回、BigQueryの新しい機能のオブジェクト テーブル(Object Tables)を使ってみました。
今回は、 署名付きURL がオブジェクト テーブルからSQLで作成できるそうなので試してみます。
オブジェクト テーブルの署名付きURLでは、
そのURLに接続することで、認証無しで対象のGoogle Cloud Storageファイルをダウンロードすることができます。
この方法で作成したURLの有効期限は6時間とのことです。
※オブジェクト テーブルは執筆時点(2023/01)では申請が必要な プレビュー となります。 (後出のEXTERNAL_OBJECT_TRANSFORM関数についてはステージの記載が見つけられませんでした。)
署名付きURL
公式のガイド を基に試しました。
オブジェクト テーブルの作成
オブジェクト テーブルは 前回のブログ のものを使用します。
クリックでコードを表示する/折りたたむ
# クラウド リソースタイプの接続の作成 bq mk --connection --location=us-east1 \ --connection_type=CLOUD_RESOURCE obj-tbls-conn
-- データセットの作成 CREATE SCHEMA my_obj_tbls OPTIONS( location = 'us-east1' ); -- オブジェクト テーブルの作成 CREATE EXTERNAL TABLE my_obj_tbls.img_sample WITH CONNECTION `us-east1.obj-tbls-conn` OPTIONS( object_metadata = 'SIMPLE', uris = ['gs://{バケット名}/inputs_img/*'] );
署名付きURLの発行
組み込みテーブル関数
という種類の EXTERNAL_OBJECT_TRANSFORM()
関数を使用して、
↓こんな感じでSQLから簡単に発行できました。
SELECT uri, signed_url FROM EXTERNAL_OBJECT_TRANSFORM( TABLE my_obj_tbls.img_sample, ['SIGNED_URL'] );
定額料金を設定していないとエラーになりました。
また、SQLを実行する度に、異なるURLが出力されました。
ファイルのダウンロード
ブラウザに署名付きURLをそのまま張り付けても、認証無しでファイルをダウンロード(今回は画像だったので表示)できました。
↓curlだとこんな感じでダウンロードできました。
curl -o sample1.png '<作成した署名付きURL>'
おわりに
本来は リモート関数と組み合わせて分析 などをするのかと思いますが、 SQLで署名付きURLを発行できるのは便利そうなので、他の活用方法もありそうだと思っています。